package geometria;

import util.Mat;

public class Triangolo  implements FiguraPiana {

	private Punto p1, p2, p3;
	private double a, b, c;

	public Triangolo(Punto p1, Punto p2, Punto p3) {
		a = p1.distanza(p2);
		b = p2.distanza(p3);
		c = p3.distanza(p1);
		if (a >= b + c || b >= a + c || c >= a + b) {
			System.out.println("Il Triangolo non esiste");
			System.exit(-1);

		}
		this.p1 = new Punto(p1);
		this.p2 = new Punto(p2);
		this.p3 = new Punto(p3);
	}

	public Triangolo(Triangolo t) {
		p1 = new Punto(t.p1);
		p2 = new Punto(t.p2);
		p3 = new Punto(t.p3);
		this.a = t.a;
		this.b = t.b;
		this.c = t.c;
	}

	public double getA() {
		return a;
	}

	public double getB() {
		return b;
	}

	public double getC() {
		return c;
	}

	public double perimetro() {
		return a + b + c;
	}

	public Punto[] getVertici() {
		Punto[] p = new Punto[3];
		p[0] = new Punto(p1);
		p[1] = new Punto(p2);
		p[2] = new Punto(p3);
		return p;

	}// getVertici

	public double[] getLati() {
		double[] l = { a, b, c };
		return l;
	}// getLati

	public double area() {
		double s = this.perimetro() / 2;
		return Math.sqrt(s * (s - a) * (s - b) * (s - c));
	}

	public String toString() {
		return "Triangolo con vertici: " + p1 + " " + p2 + " " + p3;
	}

	public enum Tipo {
		Equilatero, Isoscele, Scaleno
	};

	public Tipo tipo() {
		if (Mat.sufficientementeProssimi(a, b)&&Mat.sufficientementeProssimi(b, c))
			return Tipo.Equilatero;
		if (Mat.sufficientementeProssimi(a, b)||Mat.sufficientementeProssimi(b, c)||Mat.sufficientementeProssimi(c, a))
			return Tipo.Isoscele;
		return Tipo.Scaleno;
	}// tipo
}
